home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / c / vbcc / doc / history < prev    next >
Encoding:
Text File  |  1995-11-23  |  15.3 KB  |  311 lines

  1. vbcc is (c) in 1995 by Volker Barthelmann
  2.  
  3. (cga68k): changes in the code generator for amiga68k
  4. (cla68k): changes in the C library for amiga68k
  5. (vca68k): changes in the compiler frontend for amiga68k
  6.  
  7. Changes since V0.2l
  8.  
  9. - in conditional-expressions the type of the result was used for the
  10.   generated comparison due to a bug
  11. - ceil() and floor() were added to m881.lib (cla68k)
  12. - flags may be specified more than once
  13. - vbcc does not change argv any more
  14. - output of errors/warnings changed and error/warning-texts put in <errors.h>
  15. - % with powers of two is not replaced by an 'and' any more if the operand is
  16.   signed (cga68k)
  17. - entries in the history-file now in (bad) English rather than German
  18. - -dontwarn option added to suppress certain warnings
  19. - type conversions that are unnecessary on a certain machine may be omitted
  20.  
  21. Aenderungen seit V0.2k
  22.  
  23. - bei shifts werden keine arithmetischen Typerweiterungen mehr vorgenommen
  24. - endlose Fehlerschleifen sollten erkannt werden
  25. - Anfang eines SmallCode/SmallData-Modus; -sc und -sd schalten den jeweiligen
  26.   Modus ein; deswegen wird auch vermehrt lea/pea verwendet (cga68k)
  27. - startup.o initialisiert nun a4 fuer den SmallData-Modus (cla68k)
  28. - die xref _LVO aus startup entfernt
  29. - fd2lib geschrieben
  30. - diverse Libraryfunktionen geschrieben (vla68k)
  31. - der rechte Teil einer conditional-expression ist jetzt eine
  32.   conditional-expression (war faelschlicherweise expression)
  33. - Verwaltung der sections etwas geaendert; section=-1 am Anfang (cga68k)
  34. - Fehlerbehandlung verbessert: Initialisierungen von unvollstaendigen
  35.   Strukturen/Unionen, Arrays mit size==0 und nicht vorhandene Identifier
  36. - Fehler bei der Erkennung von Fehler-Endlosschleifen behoben; funktioniert
  37.   aber trotzdem nicht immer
  38. - Workaround fuer den compare-bug; leider nicht sehr schoen
  39. - Warnung bei dem Push-Problem
  40. - Ausdruecke hinter return wurden bemaengelt, wenn die Funktion void war
  41. - Funktionsargumente werden bei -O=256 nicht mehr sofort vom Stack geholt
  42.   sondern, wenn moeglich gesammelt und dann auf einmal
  43.  
  44. Aenderungen seit V0.2j
  45.  
  46. - vc ruft jetzt 'FreePhxAss' statt 'CPhxAss' auf (vca68k)
  47. - free() verkraftet 0 (cla68k)
  48. - bei aufgetretenen Fehlern wird der Returncode auf EXIT_FAILURE gesetzt
  49. - keine Fehlermeldung bei Files ohne Funktionsdefinition mehr
  50. - Fehler behoben, der bei Verwendung einer Adressierungsart der Form
  51.   (d,ax,dy.w[*z]) zu unnoetigen internal errors und evtl. Schlimmerem
  52.   fuehrte (&7 vergessen) (cga68k)
  53. - difftime() wird in time.h als Makro definiert (cla68k)
  54. - #undef difftime in difftime.c eingefuegt (cla68k)
  55. - Deklaration von rename() in stdio.h korrigiert (cla68k)
  56. - wird Flag 8 (256) bei -O gesetzt, wird a5 nicht mehr als Framepointer
  57.   benutzt (cga68k)
  58. - "offset out of object"-Meldungen geaendert
  59. - string-Funktionen geaendert (cla68k)
  60. - Fehler bei Registerallocation, der auftrat, wenn der Rueckgabewert nicht
  61.   in einem Register zurueckgegen wird, behoben
  62. - Variablendeklaration geaendert; sollte jetzt korrekter sein und tentative
  63.   definitions besser behandeln
  64. - fehlendes ; in stdlib.h eingefuegt (cla68k)
  65. - bei saveregs vor einem function call wird ein Scratchregister, ueber das
  66.   die Funktion aufgerufen wird, nicht gespeichert
  67. - wenn der compare-Fehler auftritt sollte zumindest ein error gemeldet
  68.   werden (cga68k)
  69. - wenn keine lokalen Variablen benutzt werden, wird kein Platz auf dem
  70.   Stack gemacht (cga68k)
  71. - Berechnung des Alignments fuer Kopierschleife sollte jetzt auch ohne
  72.   Framepointer korrekt sein (cga68k)
  73. - vc stark geaendert und config-file eingefuehrt (vca68k)
  74. - bei Meldungen wird der Filename mit ausgegeben
  75.  
  76. Aenderungen seit V0.2i
  77.  
  78. - Verbesserung der Codegenerierung fuer FPU-Operationen (cga68k)
  79. - Problem bei USEQ2ASZ und Zusammenfassen von IC/ASSIGN behoben
  80. - floating point nun auch ohne FPU moeglich, noch nicht 100% fehlerfrei (cga68k/cla68k)
  81. - Anfang einer Mathelibrary fuer die IEEE-Libraries (cla68k)
  82.   FloatingPoint<->UnsignedInteger nicht korrekt
  83. - Fehler bei switch(UNSIGNED) behoben
  84. - alignment von struct-members sollte wieder passen
  85. - unsigned char/short->fp mit FPU korrigiert (cga68k)
  86. - ein labeled-statement enthaelt das nachfolgende statement
  87. - _main aus mieee.lib oeffnet die Libraries nun in der richtigen
  88.   Reihenfolge (autsch) (cla68k)
  89. - Test auf am->Register in get_reg() eingebaut
  90. - Fehler bei Kopierschleife behoben
  91. - allocreg zaehlt bei Nutzung von erweiterten Adressierungsarten als
  92.   zerstoerend; sollte damit jetzt halbwegs stabil sein; allerdings duerften
  93.   noch internal errors, die aber wohl nichts mehr bedeuten, drin sein
  94. - allocreg/freereg von Registervariablen wird aus Code entfernt und internal
  95.   errors sind beseitig; sollte nur Effekt haben, wenn Returnregister als
  96.   Registervariable verwendet wird
  97. - bei initialisierten Unionen werden jetzt auch die uebrigen Werte aufgefuellt
  98. - bei initialisierten auto Strukturen und Unionen duerfen auch Strukturen/
  99.   Unionen gleichen Typs angegeben werden
  100. - die Kopierroutinen sollten jetzt in (fast?) allen Faellen korrekt
  101.   funktionieren und teilweise auch schneller sein
  102. - Fehler mit auto arrays der Form a[]=... behoben; der Offset wurde nicht
  103.   hochgezaehlt
  104. - difftime in der Math Library (cla68k)
  105. - einige ueble Fehler aus dem frontend fuer amiga68k entfernt (vca68k)
  106. - unbenannte Bitfelder werden bei Initialisierungen jetzt uebergangen
  107. - strengere Pruefung bei Zuweisungen zwischen Zeigern mit verschiedenen
  108.   Qualifiern
  109. - Funktionsdefinitionen nach altem Stil erzeugen keinen Prototype mehr
  110. - float Parameter in alten Funktionsdefinitionen werden korrekt behandelt
  111. - diverse Aenderungen bei der Belegung von Registervariablen; gibt jetzt
  112.   Register etwas leichter her
  113.  
  114. Aenderungen seit V0.2h
  115.  
  116. - Fehler beim Kommaoperator behoben und Meldung bei fehlenden sidefx
  117. - Konvertierungsroutinen fuer target data types geaendert
  118. - Routinen fuer Fehler/Warnungen akzeptieren jetzt beliebige Parameterlisten
  119. - Initialisierungen wie (cast)&var werden erlaubt (evtl. Probleme, wenn
  120.   verschiedene Pointer existieren)
  121. - die Adresse eines Arrays kann jetzt ermittelt werden
  122. - Ueberpruefung der Gleichheit von Typen verbessert
  123. - Registerbelegung bei return verbessert
  124. - ueberfluessige Warnung bei nicht initialisierter const extern Variable
  125.   entfernt
  126. - Franks div/mod in vc.lib eingebaut (cla68k)
  127. - Fliesskomma-returnwerte nur noch in fp0, wenn fuer fpu generiert wird (cga68k)
  128. - Stringkonstanten sind nicht mehr const char[] sondern char[]
  129. - vc versteht nun -l Option (vca68k)
  130. - printf/scanf durch leicht veraenderte Versionen aus libnix ersetzt (cla68k)
  131. - Anfang einer Mathelibrary fuer 68881 (cla68k)
  132. - (hoffentlich) korrekte floating point->integer Rundung bei FPU (cga68k)
  133.  
  134. Aenderungen seit V0.2g
  135.  
  136. - Fehler bei Registerbelegung in totem Code behoben
  137. - Fehler bei Registerbelegung in switch-statements behoben
  138. - boeser Fehler bei Variablen mit nicht-Register-return-values behoben
  139. - vc.lib: Ctrl-C wird erkannt (manchmal) (cla68k)
  140. - vc.lib: malloc() verbessert (cla68k)
  141. - vc.lib: limits.h korrigiert (cla68k)
  142. - vc.lib: time.h und time-Funktionen eingebaut (cla68k)
  143. - keine Warnung mehr bei const typedefs
  144. - Warnung bei Initialisierung von typedefs
  145. - verschiedene Aenderungen bei der Behandlung von storage-classes
  146. - globale static Variablen werden jetzt nicht mehr exportiert
  147. - storage-classes in Prototypen werden beachtet
  148. - const Variablen werden nicht mehr als Konstanten behandelt (war fehlerhaft)
  149. - Fehler in union atyps behoben (vuchar war zchar statt zuchar, argh!)
  150. - string concatenation eingebaut
  151. - Umwandlung unsigned->floating point mit FPU korrigiert (cga68k)
  152. - Vergleiche bei unsigned werden jetzt korrekt behandelt (cga68k)
  153. - bessere Behandlung von Funktionsprototypen
  154. - Zuweisungen zwischen Funktions- und Datenzeigern sind nicht mehr erlaubt
  155.  
  156. Aenderungen seit V0.2f
  157.  
  158. - -snma entfernt (cga68k)
  159. - einige Vereinfachungen im Codegenerator wegen reg/freg-Benutzung (cga68k)
  160. - Entfernung einiger alter Codefragmente im Codegenerator (cga68k)
  161. - Abfrage bei malloc() eingebaut
  162. - einige Fehler bei der IC-Generierung im Zusammenhang mit Registerbelegung
  163.   behoben
  164. - Fehlerbehandlung verbessert; nach -maxerror=n (default 10) Fehlern
  165.   wird Uebersetzung abgebrochen (bei 0 wird nicht abgebrochen)
  166. - -ansi unterdrueckt unwichtige Warnungen und Warnungen mit ANSI-Verletzung
  167.   werden als Fehler behandelt
  168. - Flags loeschen jetzt durch &=~
  169. - Zuweisungen von Arrays werden korrekt(er) behandelt (cga68k)
  170. - Zuweisungen von groesseren Typen geaendert, muss aber noch optimiert
  171.   werden. (cga68k)
  172. - falscher Returncode in alg_opt() korrigiert
  173. - Behandlung von const-Konstanten korrigiert
  174. - Meldung, wenn main() nicht int ist
  175. - arithmetik mit void * nicht mehr erlaubt
  176. - casting nach void erlaubt
  177.  
  178. Aenderungen seit V0.2e
  179.  
  180. - Nutzung von 680x0-Adressierungsarten eingebaut (cga68k)
  181. - Schreibweise displ(ax) durch (displ,ax) ersetzt (cga68k)
  182. - Nutzung von reg/freg; dadurch kein zusaetzlicher Pass noetig (cga68k)
  183.  
  184. Aenderungen seit V0.2d
  185.  
  186. - Typpruefung bei Zuweisungen verbessert und nun auch bei Initialisierungen
  187. - freed free Register teilweise behoben (?)
  188. - Deklarationen von Prototypen ohne Typ werden bemaekelt
  189. - Abhanegigkeit in eigenen Include-Dateien behoben
  190. - Fehler bei arithmetischen Operationen behoben (cga68k)
  191. - falsche Fehlermeldung bei unsigned Typ als Schleifenbedingung
  192. - / und % wird nun auch mit 68000 unterstuetzt (wenn auch ineffizient) (cga68k)
  193. - Fehler bei ADDI2P und SUBIFP behoben
  194. - Fehler (mit DREFOBJ) bei Zusammenfassung op x,y->reg;move reg->z behoben
  195. - Optionen, die einen Parameter benoetigen, muessen jetzt -opt=parameter
  196.   geschrieben werden, also z.B. vbcc -cpu=68020 file.c
  197.   (das war noetig, um das Frontend und Wildcards zu vereinfachen)
  198. - enumerations eingebaut; noch einfach ohne grosse Tests, Tags werden ignoriert
  199. - arithmetische const Typen werden in Ausdruecken als Konstanten behandelt
  200.  
  201. Aenderungen seit V0.2c
  202.  
  203. - -noa4 Option hinzugekommen (cga68k)
  204. - Fehler beim Vertauschen von COMPARE-Argumenten und mustrepeat behoben (cga68k)
  205. - Fehler bei vorzeitiger Registerfreigabe bei POSTINC/POSTDEC behoben
  206. - Fehler bei mehreren Variablendeklarationen mit Funktionen behoben
  207. - Fehler bei dc float|double behoben (cga68k)
  208. - Fehler bei sections und dc/ds behoben (cga68k)
  209. - Fehler bei Rechnungen mit FP-Registern behoben (cga68k)
  210. - diverse Fehler bei a op= b behoben
  211. - jetzt hoffentlich immer korrekte Verwendung von lsl/lsr/asr (cga68k)
  212. - vbcc hat sich endlich erfolgreich selbst kompiliert
  213. - Fliesskommakonstanten eingebaut; Berechnung aber noch zu ungenau
  214. - Deklaration fuer Bitfields eingebaut; werden aber noch als Integers behandelt
  215. - Fehler bei interner Verarbeitung von Fliesskommazahlen behoben
  216. - Deklarationen der Form unsigned a; extern a; etc. werden zugelassen
  217. - Anfaenge einer eigenen C-Library
  218.  
  219.  
  220. Noch zu behebende bekannte Fehler:
  221.  
  222. - kein korrektes Auswerten der Fehler und Setzen des Returncodes (erledigt)
  223. - keine sehr intelligenten Fehlermeldungen
  224. - manchmal ein fehlerhafter unexpected end of file error (erledigt)
  225. - Zeilennummern bei Fehlern falsch (erledigt)
  226. - bei Fehlern wird oft die darauffolgende Zeile angezeigt
  227. - bei Fehlern waehrend der Codegeneration wird die letzte Zeile der
  228.   Funktion, in der der Problem auftritt oder die erste Zeile danach
  229.   angezeigt
  230. - kein Praeprozessor (dadurch auch Einschraenkungen bei Formatierung des Src)
  231.   man muss also erst einen externen (z.B. cpp vom gcc oder dcpp vom Dice)
  232.   laufen lassen
  233. - keine enums (erledigt)
  234. - keine Bitfields (erledigt)
  235. - keine FP-Konstanten (erledigt)
  236. - FP nur mit FPU (erledigt)
  237. - keine Div. und Modulo mit cpu<68020 (erledigt)
  238. - keine erweiterten Adressierungsarten werden unterstuetzt (erledigt, aber noch Probleme)
  239. - ungenuegendes typechecking bei Initialisierungen (erledigt)
  240. - Codegenerator muss teilweise Funktionen zweimal generieren und benutzt dann
  241.   ein Rueckwaerts-Seek=>keine Tapes/Pipes o.ae. als Ziel moeglich (erledigt)
  242. - benutzt z.Z. noch gets(), dadurch Abstuerze bei zu langen Zeilen moeglich (erledigt)
  243. - keine Abfrage bei Speichermangel (erledigt)
  244. - noch ein paar einkompilierte Limits
  245. - noch keine C-Library (teilweise erledigt)
  246. - Teilweise unnoetig umstaendlich, lang, da ich oft mit Cut&Paste im Editor
  247.   gearbeitet habe, statt etwas geschickter zu schreiben (geht halt schneller).
  248.   Dadurch ist es auch sehr wichtig, mit einem gut optimierenden Compiler zu
  249.   uebersetzen, da vbcc sonst 3-4 mal langsamer laeuft. (liegt mehr an der
  250.   C-Library)
  251. - Programm- und Lokale Datensektionen muessen <32(64?)KB sein
  252.   bei cpu 68020 duerfte diese Beschraenkung wegfallen, glaube ich
  253. - Initialisierungen von Arrays sind z.Z. noch ausserordentlich ineffizient
  254. - noch diverse schlechte Codegenerierung, z.B. Zuweisungen oder Push, Pop
  255.   von Elementen mit sizeof>4 (etwas verbessert)
  256. - einige konstante Ausdruecke (z.B. casts von Adressen) werden nicht als
  257.   solche erkannt (mehr oder weniger erledigt)
  258. - evtl. ANSI-unzulaessige Vereinfachungen von arithmetischen Ausdruecken
  259. - Fliesskommarechnungen mit FPU koennen wegen erhoehter Genauigkeit der
  260.   FPU-Register nicht IEEE/ANSI-Konform sein
  261. - Umwandlungen FP<->unsigned nicht korrekt (unsigned->FP erledigt)
  262. - keine anstaendige Dokumentation
  263. - manchmal wird zwischen push-regs und restore-regs ein Register frei und
  264.   deshalb nicht vom Stack geholt (gibt sicherlich Probleme, wenn es nicht
  265.   das einzige gerettete Register war) (erledigt?)
  266. - Initialisierungen in Switch-Bloecken werden nicht ausgefuehrt (ist aber wohl ok)
  267. - static Variablen werden exportiert (erledigt)
  268. - casting nach void wird nicht erlaubt (erledigt)
  269. - korrekte Definition von main() wird nicht geprueft (erledigt)
  270. - Funktionen- und Datenzeigerkollisionen werden nicht erkannt (erledigt)
  271. - Zuweisungen *Typ<->*(const Typ) werden erlaubt (erledigt?)
  272. - Stringkonstanten sind vom Typ const char (erledigt)
  273. - enum-Konstanten scheinen Speicher zu verbrauchen
  274. - structure-expressions werden als lvalues akzeptiert
  275. - der Spezialfall &Array wird noch bemaekelt (erledigt)
  276. - bei shift mit einem long wird noch nach long gewandelt
  277. - Adressierungsarten der Form (d,ax,dy),dy werden wegen Kollision von dy
  278.   nicht benutzt
  279. - Evtl. Probleme bei erweiterten Adressierungsarten und Umwandlungen in
  280.   kleinere Typen (wegen zusaetlichem Offset) (behoben)
  281. - evtl. koennten Adressierungsarten falsch benutzt werden; muss noch
  282.   einiges getestet und ueberlegt werden (sieht inzwischen ganz gut aus)
  283. - wenn fuer COMPARE ein Register auf den Stack muss, wird wohl falscher Code
  284.   erzeugt
  285. - gen_ds braucht eigentlich den Typ (erledigt)
  286. - const Variablen werden auch als Arraygroessen akzeptiert (z.Z. ausgebaut)
  287. - Initialisierungen noch sehr fehlerhaft (von unions, von gleichen Typen
  288.   statt Konstanten und Enforcerhits etc.) (erledigt?)
  289. - f() wird in Definitionen noch nicht durch f(void) ersetzt (erledigt)
  290. - const Variablen sollen ins Code-Segment
  291. - bei Funktionsprototypen werden storage-classes ignoriert (erledigt)
  292. - Probleme beim Kopieren von auto-Array-Initialisierungen (erledigt)
  293. - Was passiert, wenn bei einer Kopierschleife fuer PUSH ein Register auf
  294.   den Stack muss? Koennte boese enden.
  295. - noch Probleme bei Typkonversion bei Funktionsargumenten (bes. double);
  296.   auch in Bezug auf Unterschied alte<->neue Deklarationen (erledigt?)
  297. - irgendwo generiert er bei FPU-Benutzung "move.s" statt "move.l" (erledigt)
  298. - Gueltigkeitsbereich bei Funktionsprototypen nicht ganz korrekt
  299. - storage-classes/external-linkage noch nicht korrekt (erledigt?)
  300. - free() muss auf 0 testen (erledigt)
  301. - Zugriffe auf volatile Objekte zaehlen nicht als Seiteneffekte
  302. - a%2^n darf bei a<0 nicht so optimiert werden
  303.  
  304. ...to be continued...
  305.  
  306. Vermutlich habe ich da auch einige vergessen und es werden zahlreiche noch
  307. unbekannte auftreten. Diese mir bitte mitteilen (besonders internal errors)
  308.  
  309. Volker (volker@vb.franken.de)
  310.  
  311.